package apis

import (
	"gitee.com/sansaniot/ssiot-core/httpmvc/api"
	"gitee.com/sansaniot/ssiot-core/serrors"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"

	"ssforward/internal/forward/models"
	"ssforward/internal/forward/models/command"
	"ssforward/internal/forward/models/query"
	"ssforward/internal/forward/service"
)

type ForwardRule struct {
	api.Api
}

// 查询转发服务规则列表
func (e ForwardRule) FindList(c *gin.Context) {
	// 请求参数
	req := query.ForwardRuleQuery{}
	// 模型
	m := models.SysForwardRule{}
	// 上下文
	err := e.MakeContext(c).Bind(&req).MakeModel(&m.Model).Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 用户信息
	req.LoadUser(c)
	// 执行
	var result interface{}
	if err, result = m.FindRuleList(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(result)
}

// 查询服务规则详情
func (e ForwardRule) FindOne(c *gin.Context) {
	// 请求参数
	req := query.ForwardRuleQuery{}
	// 模型
	m := models.SysForwardRule{}
	// 上下文
	err := e.MakeContext(c).Bind(&req).MakeModel(&m.Model).Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 用户信息
	req.LoadUser(c)
	// 执行
	var result interface{}
	if err, result = m.FindServer(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(result)
}

// 添加转发服务规则
func (e ForwardRule) AddServerRule(c *gin.Context) {
	// 请求参数
	req := command.ForwardRuleInsertReq{}
	// 业务service
	s := &service.ForwardRule{}
	// 模型
	forwardRule := &models.SysForwardRule{}
	ForwardServer := &models.SysForwardServer{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&forwardRule.Model, &ForwardServer.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// service注入实体
	s.SetServerRuleModel(forwardRule).SetServerModel(ForwardServer)
	// 用户信息
	req.LoadUser(c)
	// 执行
	var result models.SysForwardRule
	if err, result = s.AddForwardRule(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Data(result)
}

// 编辑转发服务规则
func (e ForwardRule) EditServerRule(c *gin.Context) {
	// 请求参数
	req := command.ForwardRuleEditReq{}
	// 业务service
	s := &service.ForwardRule{}
	// 模型
	forwardRule := &models.SysForwardRule{}
	forwardServer := &models.SysForwardServer{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&forwardRule.Model, &forwardServer.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// service注入实体
	s.SetServerRuleModel(forwardRule).SetServerModel(forwardServer)
	// 用户信息
	req.LoadUser(c)
	// 执行
	if err, _ = s.EditForwardRule(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(nil)
}

// 删除转发服务规则
func (e ForwardRule) DeleteServerRule(c *gin.Context) {
	// 请求参数
	req := command.RuleDeleteReq{}
	// 业务service
	s := &service.ForwardRule{}
	// 模型
	forwardRule := &models.SysForwardRule{}
	// 上下文
	err := e.MakeContext(c).
		MakeOrm().
		Bind(&req, binding.JSON).
		MakeModel(&forwardRule.Model).
		MakeService(&s.Service).
		Errors
	if err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// service注入实体
	s.SetServerRuleModel(forwardRule)
	// 用户信息
	req.LoadUser(c)
	// 执行
	if err = s.DeleteServerRule(&req); err != nil {
		e.Logger.Error(err)
		e.Fail(serrors.Fail)
		return
	}
	// 返回
	e.Ok(nil)
}
